<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文帮助: X11 GUI</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/gui_x11.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>gui_x11</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="gui_x11.txt">gui_x11.txt</a> </b>   适用于 Vim 9.0 版本。   最近更新: 2022年8月


                  <code class="vim">VIM 参考手册    by Bram Moolenaar</code>
                                <code class="vim">译者</code>: Zimin&lt;cranecai@users.sf.net&gt;、tocer


Vim 的图形用户界面                                      <b class="vimtag"> <a name="gui-x11">gui-x11</a> </b> <b class="vimtag"> <a name="GUI-X11">GUI-X11</a> </b>
                                                        <b class="vimtag"> <a name="Motif">Motif</a> </b>
1. 启动 X11 GUI                  <a href="gui_x11.html#gui-x11-start">gui-x11-start</a> 
2. GUI 资源                      <a href="gui_x11.html#gui-resources">gui-resources</a> 
3. Shell 命令行                  <a href="gui_x11.html#gui-pty">gui-pty</a> 
4. 杂项                          <a href="gui_x11.html#gui-x11-various">gui-x11-various</a> 
5. GTK 版本                      <a href="gui_x11.html#gui-gtk">gui-gtk</a> 
6. GNOME 版本                    <a href="gui_x11.html#gui-gnome">gui-gnome</a> 
7. KDE 版本                      <a href="gui_x11.html#gui-kde">gui-kde</a> 
8. 编译                          <a href="gui_x11.html#gui-x11-compiling">gui-x11-compiling</a> 
9. X11 选择机制                  <a href="gui_x11.html#x11-selection">x11-selection</a> 

其他相关文章:
 <a href="gui.html#gui.txt">gui.txt</a>        所有的 GUI 版本的通用功能


</section><hr class="doubleline" /><section class=inner>
<h4>1. 启动 X11 GUI                                         <b class="vimtag"> <a name="gui-x11-start">gui-x11-start</a> </b> <b class="vimtag"> <a name="E665">E665</a> </b></h4>
你可以通过以下两种方式之一来启动 GUI 版本的 Vim:
    gvim <code class="special">[options]</code> [files...]
    vim -g <code class="special">[options]</code> [files...]

所以，如果你将可执行文件取名为 "gvim"，或者做一个叫 "gvim" 的链接，GUI 版本的
Vim 就会被自动运行。在 "gvim" 后也可以添加字符，如 "gvim-5"。

通过以下命令之一，你也可以从终端版本进入 GUI:
        :gui <code class="special">[++opt]</code> <code class="special">[+cmd]</code> [-f|-b] [files...]                  <b class="vimtag"> <a name=":gu">:gu</a> </b> <b class="vimtag"> <a name=":gui">:gui</a> </b>
        :gvim <code class="special">[++opt]</code> <code class="special">[+cmd]</code> [-f|-b] [files...]                 <b class="vimtag"> <a name=":gv">:gv</a> </b> <b class="vimtag"> <a name=":gvim">:gvim</a> </b>
"-f" 参数在前台运行 Vim。
"-b" 参数在后台运行 Vim (默认)。
参考  <a href="editing.html#++opt">++opt</a>  和  <a href="editing.html#+cmd">+cmd</a> 。

                                                        <b class="vimtag"> <a name="gui-fork">gui-fork</a> </b>

当 GUI 启动时，它调用 fork() 并退出当前进程。当 gvim 从外壳启动时，这将允许外
壳接受其后更多的命令。如果你不想这样 (例如，当一邮件程序要等待运行的 gvim 退出
时)，可以用 "gvim -f"，"vim -gf" 或 ":gui -f" 来启动。不要用 "vim -fg"，因为
"-fg" 表示前台颜色。

当用 "vim -f" 启动，然后使用 ":gui"，Vim 将在前台运行。参数 "-f" 将被记住。要
强迫 Vim 在后台运行，使用 ":gui -b"。

"gvim --nofork" 和 "gvim -f" 的效果一样。

有还在运行的作业时 Vim 不会 fork，因为进程不再是子进程。
                                                                <b class="vimtag"> <a name="E851">E851</a> </b> <b class="vimtag"> <a name="E852">E852</a> </b>
GUI 方式启动失败时，Vim 仍会继续尝试以终端方式运行。

如果你想一直在前台运行 GUI，给 <a href="options.html#'guioptions'">'guioptions'</a> 加入 'f' 标志位。 <a href="starting.html#-f">-f</a> 。

</section><hr class="doubleline" /><section class=inner>
<h4>2. GUI 资源                             <b class="vimtag"> <a name="gui-resources">gui-resources</a> </b> <b class="vimtag"> <a name=".Xdefaults">.Xdefaults</a> </b></h4>
如果使用 Motif 版本的 GUI (不是 KDE、GTK+ 或 Win32 版本)，有很多 X 资源可以
用。应该使用类名 Vim 来设置。它们被列如下:

<code class="section">    资源名称            意义            </code>

    reverseVideo        布尔型: 是不是翻转视频？
    background          背景色。
    foreground          普通文字颜色。
    scrollBackground    滚动条槽的颜色。
    scrollForeground    滚动条滑块和箭头颜色。
    menuBackground      菜单背景色。
    menuForeground      菜单前景色。
    tooltipForeground   工具和气泡提示前景色。
    tooltipBackground   工具和气泡提示背景色。

    font                普通文字的字体名称。
    boldFont            加粗文字的字体名称。
    italicFont          斜体文字的字体名称。
    boldItalicFont      加粗、斜体文字的字体名称。
    menuFont            菜单字体名称。编译时没有  <a href="various.html#+xfontset">+xfontset</a>  特性时使用
    menuFontSet         菜单字体集名称。编译时有  <a href="various.html#+xfontset">+xfontset</a>  特性时使用
    tooltipFont         工具和气泡提示的字体名称。
                        当编译时带有  <a href="various.html#+xfontset">+xfontset</a>  特性时，使用字体集名称。

    geometry            启动时的 gvim 窗口大小 (默认和启动它的终端窗口一样)。
    scrollbarWidth      滚动条宽度。
    borderWidth         文本区域周围边框的宽度。

只有用户通过上述资源指定了粗体、斜体、斜粗体文本的特定字体时，Vim 才会使用它。
Vim 不会根据正常字体来推测应该使用的字体。

<code class="note">备注</code>: 颜色也可用 ":highlight" 命令设置。可以使用这几个组: "Normal"，"Menu"，
"Tooltip"，"Scrollbar"。例如: 
<code class="example">        :highlight Menu guibg=lightblue</code>
<code class="example">        :highlight Tooltip guibg=yellow</code>
<code class="example">        :highlight Scrollbar guibg=lightblue guifg=blue</code>
<code class="example">        :highlight Normal guibg=grey90</code>

                                                        <b class="vimtag"> <a name="font-sizes">font-sizes</a> </b>
<code class="note">备注</code>: 所有的字体 (除了菜单和工具按钮提示) 必须是同样大小！！！如果你不这样做，
文字将无法显示或混成一团。Vim 不检查字体大小。必须一样的是以屏幕像素计算的尺
寸。<code class="note">注意</code>有些字体有同样的 "点" 数但是像素尺寸却不同！另外，与字体位置相关的属性
摆放 (ascent 和 descent) 也必须相同。你可以用 "xlsfonts -l <code class="special">{fontname}</code>" 核实。

如果上述任何一个资源其后用 Vim 命令设置，例如用 ":set guifont=Screen15"，X 资
源的设置将被覆盖 (目前唯一支持的选项是 <a href="options.html#'guifont'">'guifont'</a>)。

这里有个例子，你可以考虑加入到 ~/.Xdefaults 文件中: 
<code class="example"></code>
<code class="example">        Vim*useSchemes:                 all</code>
<code class="example">        Vim*sgiMode:                    true</code>
<code class="example">        Vim*useEnhancedFSB:             true</code>
<code class="example">        Vim.foreground:                 Black</code>
<code class="example">        Vim.background:                 Wheat</code>
<code class="example">        Vim*fontList:                   7x13</code>
<code class="example"></code>
前三个是 Silicon Graphics 机器的标准资源，这将使 Motif 应用效果更好，强烈推
荐！

"Vim*fontList" 设置 Motif 的菜单字体。例如: 
<code class="example">        Vim*menuBar*fontList:        -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*</code>

<code class="note">备注</code>: 一个更通用，更完善，可在 Motif 里使用的设置字体的方法: 
<code class="example">        Vim.menuFont:        -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*</code>
或者，当编译进  <a href="various.html#+xfontset">+xfontset</a>  特性时: 
<code class="example">        Vim.menuFontSet:     -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*</code>
<code class="example"></code>
用 "Vim.geometry" 替代 "Vim*geometry"。不然，菜单将被破坏。

如果出现 "Cannot allocate colormap entry for "gray60" 的错误信息，试试在你的
Vim 资源中加入这些 (改变成你喜欢的颜色): 
<code class="example"></code>
<code class="example">        Vim*scrollBackground:           Black</code>
<code class="example">        Vim*scrollForeground:           Blue</code>
<code class="example"></code>
资源也可用 Vim 参数来设定:

<code class="section">    参数                含义    </code>
                                                        <b class="vimtag"> <a name="-gui">-gui</a> </b>
   -display <code class="special">{display}</code>   在 <code class="special">{display}</code> 上运行 Vim         <b class="vimtag"> <a name="-display">-display</a> </b>
   -iconic              图标化运行 Vim                  <b class="vimtag"> <a name="-iconic">-iconic</a> </b>
   -background <code class="special">{color}</code>  背景使用 <code class="special">{color}</code>                <b class="vimtag"> <a name="-background">-background</a> </b>
   -bg <code class="special">{color}</code>          同上                            <b class="vimtag"> <a name="-bg">-bg</a> </b>
   -foreground <code class="special">{color}</code>  普通文字使用 <code class="special">{color}</code>            <b class="vimtag"> <a name="-foreground">-foreground</a> </b>
   -fg <code class="special">{color}</code>          同上                            <b class="vimtag"> <a name="-fg">-fg</a> </b>
   -ul <code class="special">{color}</code>          同上                            <b class="vimtag"> <a name="-ul">-ul</a> </b>
   -font <code class="special">{font}</code>         普通文字使用 <code class="special">{font}</code>             <b class="vimtag"> <a name="-font">-font</a> </b>
   -fn <code class="special">{font}</code>           同上                            <b class="vimtag"> <a name="-fn">-fn</a> </b>
   -boldfont <code class="special">{font}</code>     粗体字使用 <code class="special">{font}</code>               <b class="vimtag"> <a name="-boldfont">-boldfont</a> </b>
   -italicfont <code class="special">{font}</code>   斜体字使用 <code class="special">{font}</code>               <b class="vimtag"> <a name="-italicfont">-italicfont</a> </b>
   -menufont <code class="special">{font}</code>     菜单项使用 <code class="special">{font}</code>               <b class="vimtag"> <a name="-menufont">-menufont</a> </b>
   -menufontset <code class="special">{fontset}</code> 菜单项使用 <code class="special">{fontset}</code>          <b class="vimtag"> <a name="-menufontset">-menufontset</a> </b>
   -mf <code class="special">{font}</code>           同上                            <b class="vimtag"> <a name="-mf">-mf</a> </b>
   -geometry <code class="special">{geom}</code>     初始大小设为 <code class="special">{geom}</code>             <b class="vimtag"> <a name="-geometry">-geometry</a> </b>
   -geom <code class="special">{geom}</code>         同上，参见  <a href="gui_x11.html#-geometry-example">-geometry-example</a>   <b class="vimtag"> <a name="-geom">-geom</a> </b>
   -borderwidth <code class="special">{width}</code> 使用宽度 <code class="special">{width}</code>                <b class="vimtag"> <a name="-borderwidth">-borderwidth</a> </b>
   -bw <code class="special">{width}</code>          同上                            <b class="vimtag"> <a name="-bw">-bw</a> </b>
                                                        <b class="vimtag"> <a name="-scrollbarwidth">-scrollbarwidth</a> </b>
   -scrollbarwidth <code class="special">{width}</code>      滚动条宽度使用 <code class="special">{width}</code>
   -sw <code class="special">{width}</code>          同上                            <b class="vimtag"> <a name="-sw">-sw</a> </b>
   -menuheight <code class="special">{height}</code> 菜单栏高度使用 <code class="special">{height}</code>         <b class="vimtag"> <a name="-menuheight">-menuheight</a> </b>
   -mh <code class="special">{height}</code>         同上                            <b class="vimtag"> <a name="-mh">-mh</a> </b>
                        <code class="note">备注</code>:Motif 忽略此值，那里自动计算高度来使菜单合身
   -reverse             使用反转视频                    <b class="vimtag"> <a name="-reverse">-reverse</a> </b>
   -rv                  同上                            <b class="vimtag"> <a name="-rv">-rv</a> </b>
   +reverse             不使用反转视频                  <b class="vimtag"> <a name="-+reverse">-+reverse</a> </b>
   +rv                  同上                            <b class="vimtag"> <a name="-+rv">-+rv</a> </b>
   -xrm <code class="special">{resource}</code>      设定指定资源                    <b class="vimtag"> <a name="-xrm">-xrm</a> </b>

<code class="note">注意</code> 有关反转视频的<code class="note">注意</code>事项: Vim 检查最终效果是在暗的背景配亮文字。原因是有些
版本的 X11 交换颜色，有些不这么做。以下两个例子都是设定了黄色文字、蓝色背景:
    gvim -fg Yellow -bg Blue -reverse
    gvim -bg Yellow -fg Blue -reverse

                                                        <b class="vimtag"> <a name="-geometry-example">-geometry-example</a> </b>
一个尺寸的例子: 
<code class="example">        gvim -geometry 80x63+8+100</code>
这个命令创建一个自左 8 像素，自顶 100 像素的一个 80 列宽，63 行高的窗口。

</section><hr class="doubleline" /><section class=inner>
<h4>3. Shell 命令行                                         <b class="vimtag"> <a name="gui-pty">gui-pty</a> </b></h4>
警 告: 从 GUI 中执行外部命令并不总是可行的。像 "ls"、"grep"、"make" 这样的普通
命令一般都是有效的。那些需要智能终端的命令如，"less"、"ispell" 就未必了。有些
甚至可能使 GUI 挂起，你从而必须从另外个终端里 kill 它。所以要小心。

有两种方式可以用外壳命令做 I/O 操作: 管道和伪终端。默认是伪终端，它可以很好地
工作在许多系统上。

不幸的是，伪终端的实现在每个 Unix 系统上是不同的。并且，一些系统上需要 root 权
限。为了避免这类问题，可以在编辑文件之前先试一下。做好 kill 那个命令或 Vim 的
准备。如 ":r !cat" 这样的命令会导致挂起的。

如果你的无法使用伪终端，可以复位 <a href="options.html#'guipty'">'guipty'</a> 选项: 
<code class="example"></code>
<code class="example">        :set noguipty</code>
<code class="example"></code>
管道可用在任一 Unix 系统上，但也有缺点:
- 一些外壳命令会<code class="note">注意</code>到管道的存在，而作出不同的操作。如 ":!ls"，将在一栏里列文
  件。
- ":sh" 命令将不会显示提示符，但可以部分工作。
- 当使用 ":make" 时，很可能无法用 <code class="keystroke">CTRL-C</code> 中断。

当外部命令运行时，事先键入的内容经常丢失。这在管道和伪终端中，都有发生。这是个
已知的问题，但看上去无法解决 (至少很困难)。

                                                        <b class="vimtag"> <a name="gui-pty-erase">gui-pty-erase</a> </b>
当你的删除键工作不正常时，你应该修改 "~/.cshrc" 文件，或者你所用的外壳的等同文
件。例如，当你使用退格键来删除字符时，反而产生了 "^H"，你可以添加以下内容到
"~/.cshrc" 中: 
<code class="example">        stty erase ^H</code>
^H 是 <code class="keystroke">CTRL-H</code>，要键入它，用 <code class="keystroke">CTRL-V</code> <code class="keystroke">CTRL-H</code>。

</section><hr class="doubleline" /><section class=inner>
<h4>4. 杂项                                                 <b class="vimtag"> <a name="gui-x11-various">gui-x11-various</a> </b></h4>
                                                        <b class="vimtag"> <a name="gui-x11-printing">gui-x11-printing</a> </b>
"File/Print" 仅仅发送当前的缓冲区内容到 "lpr"。没有选项或其他东西。如果你需要
其它效果，可以定义你自己的打印命令。如: 
<code class="example"></code>
<code class="example">  :10amenu File.Print :w !lpr -Php3</code>
<code class="example">  :10vmenu File.Print :w !lpr -Php3</code>

                                                        <b class="vimtag"> <a name="X11-icon">X11-icon</a> </b>
默认的 Motif 版本的 Vim 使用黑白按钮。在 $VIMRUNTIME/vim32x32.xpm 包含一个彩色
的 Vim 图标。在 GTK+，这是内建的图标。不幸的是，你该怎样安装它取决于你的窗口管
理器。你可以从 <a href="options.html#'guioptions'">'guioptions'</a> 除去 'i' 标志，来除去黑白按钮: 
<code class="example">  :set guioptions-=i</code>
<code class="example"></code>
如果你使用 fvwm* 系列窗口管理器，你只需要在 .fvwm2rc 配置文件中加入: 
<code class="example"></code>
<code class="example">  Style "vim"           Icon vim32x32.xpm</code>
<code class="example"></code>
要保证图标文件的位置和窗口管理器 ImagePath 语句声明中所指定的一致。要么在
.fvwm2rc 修改图标路径，要么将图标放入以下预定义的任一目录中: 
<code class="example"></code>
<code class="example">  ImagePath /usr/X11R6/include/X11/pixmaps:/usr/X11R6/include/X11/bitmaps</code>

<code class="note">备注</code>: 旧版本的 fvwm 使用 "IconPath" 而不是 "ImagePath"。

对于 CDE "dtwm" (Motif 的一个变体)，在 .Xdefaults 中加入这一行: 
<code class="example">   Dtwm*Vim*iconImage: /usr/local/share/vim/vim32x32.xpm</code>
<code class="example"></code>
在 "mwm" (Motif 窗口管理器) 该行应是: 
<code class="example">   Mwm*Vim*iconImage: /usr/local/share/vim/vim32x32.xpm</code>
<code class="example"></code>
<code class="section">X11 中可用的鼠标指针 </code>
                                                <b class="vimtag"> <a name="X11_mouse_shapes">X11_mouse_shapes</a> </b>

当使用  <a href="options.html#'mouseshape'">'mouseshape'</a>  选项时，vim 进入各种模式时鼠标指针都会自动改变 (例如，在
插入或命令模式中)。目前可用的指针如下:

        arrow                   一个指向西北的箭头
        beam                    像 I 的竖直条
        size                    一个指着上下的箭头
        busy                    一个时间漏斗
        blank                   一个不可见的指针
        crosshair               一个瘦 "+" 符号
        hand1                   一个指向西北的暗手
        hand2                   一个指向西北的亮手
        pencil                  一支指向东南的笔
        question                带问号的箭头
        right_arrow             一个指向东南的箭头
        up_arrow                一个指向上面的箭头

另外，任何 X11 内建的鼠标指针都可以通过指定一个在 X11/cursorfont.h 中定义的整
数来使用。

如果使用一个在其它系统有效，而在 X11 中无效的名字，使用默认的 "arrow"。

</section><hr class="doubleline" /><section class=inner>
<h4>5. GTK 版本                                     <b class="vimtag"> <a name="gui-gtk">gui-gtk</a> </b> <b class="vimtag"> <a name="GTK+">GTK+</a> </b> <b class="vimtag"> <a name="GTK">GTK</a> </b> <b class="vimtag"> <a name="GTK3">GTK3</a> </b></h4>
GUI 的 GTK 版本的使用略有不同。

GTK＿不＿使用传统的 X 资源设置。所以，你的 ~/.Xdefaults 或 app-defaults 文件不
会被使用。
不支持许多传统的 X 命令行参数。(例如，-bg，-fg 等)。支持的有:

<code class="section">    命令行参数              资源名称            含义 </code>
    -fn  或  -font          .font               文字字体名称
    -geom  或  -geometry    .geometry           gvim 窗口尺寸
    -rv  或  -reverse       *reverseVideo       白字黑底
    -display                                    使用显示
    -fg -foreground <code class="special">{color}</code>                     前景色
    -bg -background <code class="special">{color}</code>                     背景色

要设置字体，参阅  <a href="options.html#'guifont'">'guifont'</a> 。对 GTK，也可以使用相应的菜单选项设置。

另外，也有 GTK 内部处理的命令行参数。要知道如何使用以下的参数，请查看 GTK 文
档:
        --sync
        --gdk-debug
        --gdk-no-debug
        --no-xshm       (GTK+ 2 版本不使用)
        --xim-preedit   (GTK+ 2 版本不使用)
        --xim-status    (GTK+ 2 版本不使用)
        --gtk-debug
        --gtk-no-debug
        --g-fatal-warnings
        --gtk-module
        --display       (GTK+ 对应 -display 的选项；用法相同)
        --screen        (屏幕号；用于对 GTK+ 2.2 多屏幕支持。)

以下的参数在用到  <a href="various.html#+netbeans_intg">+netbeans_intg</a>  特性时被忽略:
        -xrm
        -mf

关于颜色，vim 的颜色设置 (用于语法高亮) 仍然和传统的 Vim 方式一致。参考
 <a href="syntax.html#:highlight">:highlight</a> 。

如果你想设置其它的 gui 组件 (如，菜单栏，滚动条，等等) 的颜色，那些是 GTK 的特
别设置，你需要改动 gtkrc 之类的文件。至于如何改动，可参考 GTK 文档。更多的信息
请参考 <a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html">http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html</a>。
                                                        <b class="vimtag"> <a name="gtk3-slow">gtk3-slow</a> </b>
使用 GTK3 时如果 Vim 看来很慢，可以试试设置环境变量 $GDK_RENDERING 为
"image"。

<code class="section">工具提示条色彩 </code>
                                                        <b class="vimtag"> <a name="gtk-tooltip-colors">gtk-tooltip-colors</a> </b>
如，设定工具提示条为黑字亮黄色背景: 
<code class="example"></code>
<code class="example">        style "tooltips"</code>
<code class="example">        {</code>
<code class="example">                bg[NORMAL] = "#ffffcc"</code>
<code class="example">                fg[NORMAL] = "#000000"</code>
<code class="example">        }</code>
<code class="example"></code>
<code class="example">        widget "gtk-tooltips*"          style "tooltips"</code>
<code class="example"></code>
写入文件 ~/.gtkrc，这些设置就会被 GTK+ 使用。对于 GTK+ 2 而言，可能要修改的文
件是 ~/.gtkrc-2.0。但各个发行版本不一样。

GTK+ 3 上，要达成类似的效果，可在 $XDG_HOME_DIR/gtk-3.0/gtk.css (见下个小节)
中加入以下的 CSS 代码:

对 GTK+ 3 &lt; 3.20 而言: 
<code class="example"></code>
<code class="example">        .tooltip {</code>
<code class="example">                background-color: #ffffcc;</code>
<code class="example">                color: #000000;</code>
<code class="example">        }</code>

对 GTK+ 3 &gt;= 3.20 而言: 
<code class="example"></code>
<code class="example">        tooltip {</code>
<code class="example">            background-color: #ffffcc;</code>
<code class="example">            text-shadow: none;</code>
<code class="example">        }</code>
<code class="example"></code>
<code class="example">        tooltip label {</code>
<code class="example">            color: #2e3436;</code>
<code class="example">        }</code>


<code class="section">GTK+ CSS 的快速一览 </code>
                                                        <b class="vimtag"> <a name="gtk-css">gtk-css</a> </b>
这一小段的内容只适用于 GTK+ 3.2 或以后版本，因为它们有对 GTK+ CSS 的稳定支持:

        <a href="https://developer.gnome.org/gtk3/stable/theming.html">https://developer.gnome.org/gtk3/stable/theming.html</a>

GTK+ 使用 CSS 来提供 小组件的风格和排版。本小段会通过简单和说明性的示例来提供
GTK+ CSS 的快速一览。

通常可以这样编辑此配置: 
<code class="example">        vim $HOME/.config/gtk-3.0/gtk.css</code>
<code class="example"></code>
<code class="example"></code>
<code class="section">示例 1。空白空间调整 </code>

缺省 GTK+ 3 GUI 的工具条和标签条行比 GTK+ 2 GUI 稍大。有些人可能希望和 GTK+ 2
GUI 在大小上更加接近一些。

为此，我们要减少图标和标签周围看来过多的空白。

在 $XDG_HOME_DIR/gtk-3.0/gtk.css 中加入以下内容 (通常是
$HOME/.config/gtk-3.0/gtk.css): 
<code class="example"></code>
<code class="example">        toolbar button {</code>
<code class="example">            margin-top: -2px;</code>
<code class="example">            margin-right: 0px;</code>
<code class="example">            margin-bottom: -2px;</code>
<code class="example">            margin-left: 0px;</code>
<code class="example"></code>
<code class="example">            padding-top: 0px;</code>
<code class="example">            padding-right: 0px;</code>
<code class="example">            padding-bottom: 0px;</code>
<code class="example">            padding-left: 0px</code>
<code class="example">        }</code>
<code class="example"></code>
<code class="example">        notebook tab {</code>
<code class="example">            margin-top: -1px;</code>
<code class="example">            margin-right: 3px;</code>
<code class="example">            margin-bottom: -1px;</code>
<code class="example">            margin-left: 3px;</code>
<code class="example"></code>
<code class="example">            padding-top: 0px;</code>
<code class="example">            padding-right: 0px;</code>
<code class="example">            padding-bottom: 0px;</code>
<code class="example">            padding-left: 0px</code>
<code class="example">        }</code>

因为这是 CSS，可用以下的缩写重写: 
<code class="example"></code>
<code class="example">        toolbar button {</code>
<code class="example">            margin: -2px 0px;</code>
<code class="example">            padding: 0px;</code>
<code class="example">        }</code>
<code class="example"></code>
<code class="example">        notebook tab {</code>
<code class="example">            margin: -1px 3px;</code>
<code class="example">            padding: 0px</code>
<code class="example">        }</code>

<code class="note">备注</code>: 也可用 <a href="options.html#'toolbariconsize'">'toolbariconsize'</a> 来调整图标大小。

<code class="note">备注</code>: 取决于图标方案和/或使用的字体，要达到满意的结果可能需要更多额外微调。

<code class="note">备注</code>: 除了 margin 和 padding 以外，还可用 border。具体细节可见 CSS 的盒模式，
例如，

        <a href="https://www.w3schools.com/css/css_boxmodel.asp">https://www.w3schools.com/css/css_boxmodel.asp</a>

<code class="section">示例 2。色彩之外 </code>

GTK+ CSS 也支持渐变色: 
<code class="example"></code>
<code class="example">        tooltip {</code>
<code class="example">            background-image: -gtk-gradient(linear,</code>
<code class="example">                                            0 0, 0 1,</code>
<code class="example">                                            color-stop(0, #344752),</code>
<code class="example">                                            color-stop(0.5, #546772),</code>
<code class="example">                                            color-stop(1, #243742));</code>
<code class="example">        }</code>
<code class="example"></code>
<code class="example">        tooltip label {</code>
<code class="example">            color: #f3f3f3;</code>
<code class="example">        }</code>

渐变色用于使 GUI 元素视觉上和其它元素视觉上有区隔。相应地，有效地使用渐变色是
使主题方案的色彩和光线有统一的感觉一项有用的技术。

<code class="note">备注</code>: 制定主题方案是困难的，因为要让所有应用都同样悦目；使单个应用更吸引往往使
其它的应用意料之外地不好看或破坏其可用性。要改进主题方案时请记住这一点。


<code class="section">示例 3。边框颜色 </code>

要最大化时去掉边框: 
<code class="example"></code>
<code class="example">    @define-color bg_color #1B2B34;</code>
<code class="example">    #vim-main-window {</code>
<code class="example">        background-color: @bg_color;</code>
<code class="example">    }</code>
<code class="example"></code>
<code class="example"></code>
<code class="section">使用 Vim 作为 GTK+ 的插件 </code>
                                                        <b class="vimtag"> <a name="gui-gtk-socketid">gui-gtk-socketid</a> </b>

当 GTK+ 版本的 Vim 启动时，它会创建自己的顶层窗口 (技术上，'GtkWindow')。GTK+
提供了用 GtkSocket 和 GtkPlug 组件 (widget) 嵌入的便利手段。如果一 GTK+ 应用程
序在它的一个窗口里创建了一个 GtkSocket 组件，另外一个完全不同的 GTK+ 程序就可
以使用该 socket 的 ID 来建立一个在顶层的 GtkPlug 组件，从而将自己完全嵌入前一
个应用程序中。

如果你通过命令行参数 '--socketid' 传给 Vim 一个十进制或十六进制的值，Vim 将使
用该值来创建一个 GtkPlug 组件，而不是普通的 GtkWindow。这将使 Vim 作为 GTK 的
插件来运行。

这其实是一个编程的接口，必须有专门的应用程序支持 (该程序必须正确地启动 Vim)。
有关更多的 GTK+ socket 信息，参考 <a href="http://www.gtk.org/api/">http://www.gtk.org/api/</a>

<code class="note">备注</code>: 这个功能需要最新的 GTK 版本。GTK 1.2.10 仍然有小问题。socket 特性还没有
在 GTK+ 2 下测试过，欢迎毛遂自荐。

</section><hr class="doubleline" /><section class=inner>
<h4>6. GNOME 版本                                   <b class="vimtag"> <a name="gui-gnome">gui-gnome</a> </b> <b class="vimtag"> <a name="Gnome">Gnome</a> </b> <b class="vimtag"> <a name="GNOME">GNOME</a> </b></h4>
Gnome GUI 就像 GTK 一样工作。有关细节可以参考  <a href="gui_x11.html#GTK">GTK</a> 。但是程序的外观有些不同，
而且 Gnome GUI 有一个很重要的特性是 GTK+ 没有的: 和会话管理器的交互。
 <a href="gui_x11.html#gui-gnome-session">gui-gnome-session</a> 

以下是外观上的不同之处:
- 使用 GNOME 对话框 (仅对 GNOME 1 而言)。GNOME 2 GUI 使用和 GTK+ 2 一样的对话
  框。
- 使用 GNOME 锚接机制 (dock)，这使得工具栏、菜单栏可以移至不同的地方，而不是必
  须在顶部 (如，工具栏可以放在上下左右任何一处)。只有在 GNOME 2 中，保存它们的
  位置。
- 那意味着菜单栏和工具栏的句柄回来了！Yeah！并且重设网格尺寸又可以工作了。

在 configure (配置) 阶段如果发现 GNOME 或者使用 --enable-gnome-check 参数，
GNOME 将被编译进来。

<code class="note">注意</code>: GTK+ 3 GUI 版本不要用 --enable-gnome-check。上述的功能已经整合进了 GTK+
3。


<code class="section">GNOME 会话支持 </code>
                                        <b class="vimtag"> <a name="gui-gnome-session">gui-gnome-session</a> </b> <b class="vimtag"> <a name="gnome-session">gnome-session</a> </b>

如果在退出登录时有任何改动过的缓冲区，Vim 会显示一个确认窗口。单击 <code class="special">[Cancel]</code> 会
终止退出的过程。否则当前的会话会被用  <a href="starting.html#:mksession">:mksession</a>  命令存入硬盘，并在下次登陆时
自动恢复。

GNOME 会话支持应该也对 KDE 会话管理器有效。如果你有在使用时遇到什么问题的话，
请提交漏洞报告。

<code class="note">备注</code>: 会话的自动存储完全是透明的。这样避免了与你自己的会话文件，脚本和自动命令
的冲突。具体的细节如下:
- 会话文件被存储于一个独立的路径 (通常是 $HOME/.gnome2)。
- <a href="options.html#'sessionoptions'">'sessionoptions'</a> 被忽略，Vim 会使用一些合适的，硬性规定的选项: 
<code class="example">        blank,curdir,folds,globals,help,options,tabpages,winsize</code>
- 在存储时，内部变量  <a href="eval.html#v:this_session">v:this_session</a>  的值不会被改变。同时，当再次登录时，该值
  会被恢复。

Vim 不会存储 GUI 窗口的大小和位置，因为这是窗口管理器的职责。但是如果编译了
GTK+ 2 支持，Vim 会通过恢复窗口角色的方法 (用命令行参数  <a href="starting.html#--role">--role</a> )，帮助窗口管
理器识别窗口。

</section><hr class="doubleline" /><section class=inner>
<h4>7. KDE 版本                                     <b class="vimtag"> <a name="gui-kde">gui-kde</a> </b> <b class="vimtag"> <a name="kde">kde</a> </b> <b class="vimtag"> <a name="KDE">KDE</a> </b> <b class="vimtag"> <a name="KVim">KVim</a> </b></h4>                                                        <b class="vimtag"> <a name="gui-x11-kde">gui-x11-kde</a> </b>

现在没有 Vim 的 KDE 版本。曾有过基于 Qt 工具包的一些移植工作，但是一直不能正常
运行，而该项工作也已放弃。在 Yzis 上，还在开发。
<a href="https://github.com/chrizel/Yzis">https://github.com/chrizel/Yzis</a>

</section><hr class="doubleline" /><section class=inner>
<h4>8. 编译                                                 <b class="vimtag"> <a name="gui-x11-compiling">gui-x11-compiling</a> </b></h4>
如果使用 X11，Vim 的 configure 将首先试着在你的系统里找到需要的 GTK+ 的文件。
如果同时有 GTK+ 2 和 GTK+ 3 可用，优先选择 GTK+ 2，除非给 configure 显式传入
--enable-gui=gtk3。

如果找不到 GTK+ 文件，就试着找 Motif 文件。如果全失败， GUI 会被禁用。

对于 GTK+，Vim 的配置过程使用 pkg-config(1) 来确保特定版本的 GTK+ 被正确安装并
可用。因此，最好在运行 configure 前确认系统的 pkg-config 可用，且有所需的 GTK+
版本的 .pc 文件。为此，运行以下命令来检查 pkg-config 是否可用于 GTK+ 2: 
<code class="example"></code>
<code class="example">    $ pkg-config --modversion gtk+-2.0</code>
<code class="example"></code>
对 GTK+ 3，把 gtk+-2.0 替换为 gtk+-3.0。如果你有正确的 GTK+ 版本号，可以继续；
不然，你可能要做些系统维护的例行工作来正确设置 pkg-config 和 GTK+。

缺省编译已经带了 GTK+ 2 GUI。所以，通常不需要传入 --enable-gui=gtk2 之类的选项
来 configure 和编译。

可选地，GTK+ 2 GUI 可以整合进 GNOME 2 的支持。给 configure 传入
--enable-gnome-check 可以打开此项支持。

如要你想编译 GTK+ 3 GUI，需要给 configure 显式传入 --enable-gui=gtk3，并避免传
入 --enable-gnome-check，因为 GNOME 2 支持所需的功能已经整合进了 GTK+ 3 里。

否则，如果你使用 Motif 但配置程序无法找到 Motif 文件所在的目录时，更改
Makefile 使之含有这些目录名。查找 "GUI_INC_LOC" 来找到设置 Motif 的目录的示
例。

                                                        <b class="vimtag"> <a name="gui-x11-gtk">gui-x11-gtk</a> </b>
目前，Vim 支持 GTK+ 2 和 GTK+ 3。

GTK+ 2 GUI 需要 GTK+ 2.2 或更新版本。

尽管 GTK+ 3 GUI 源代码的编写方式使得 3.x 系列的所有版本都可以编译通过，我们建
议 GTK+ 3.10 或更新版本，因为此版本在重画上有较大的实现改动。

                                                        <b class="vimtag"> <a name="gui-x11-motif">gui-x11-motif</a> </b>
对于 Motif，你需要至少 1.2 和/或 X11R5 版本。Motif 2.0 和 X11R6 也可以。Motif
1.1 和 X11R4 可能可以工作，但不保证 (可能有些问题，但也许稍作改动就可以编译、
运行成功。如果你这样做了，请将补丁发给我)。最新版的 LessTif 据报告是可以的。

                                            <b class="vimtag"> <a name="gui-x11-athena">gui-x11-athena</a> </b> <b class="vimtag"> <a name="gui-x11-neXtaw">gui-x11-neXtaw</a> </b>
8.2.4677 补丁删除了 Athena GUI 和 neXtaw 的支持。

                                                        <b class="vimtag"> <a name="gui-x11-misc">gui-x11-misc</a> </b>
总的来说，不要混合不同版本的 GTK+，Motif 和 X11 的文件。这会引起问题。如，使用
X11R5 的头文件和 X11R6 的库，大半不能工作 (尽管连接不报错，Vim 之后的运行将崩
溃)。

</section><hr class="doubleline" /><section class=inner>
<h4>9. X11 选择机制                                         <b class="vimtag"> <a name="x11-selection">x11-selection</a> </b></h4>
如果使用 X11，无论是 GUI 的还是 xterm 中运行的，Vim 都提供了多种使用 X11 的选
择机制和剪贴板的方法。它们是通过两个选择寄存器 "* 和 "+ 来实现的。

X11 提供了两种基本类型的全局存储方式，选择区和剪切缓冲区。在一个重要的方面它们
是有区别的: 选择区是程序拥有的，并在程序退出时 (如 Vim) 消失，因而数据也消失
了。而剪切缓冲区存储在 X 服务器的内部，会保持到被重写或 X 服务器退出 (例如登出
时) 为止。

发起程序拥有选择区的内容 (如，通过复制)，仅当其它程序请求时才执行传送操作
(如，通过粘贴)。

剪切缓冲区立即被写入，之后便可直接通过 X 服务器进行存取，无需与发起程序交互。

                                                        <b class="vimtag"> <a name="quoteplus">quoteplus</a> </b> <b class="vimtag"> <a name="quote+">quote+</a> </b>
文档上说，有三种 X 选择区: PRIMARY (用于代表当前的可视选择内容，就像 Vim 的可
视模式的操作对象)，SECONDARY (定义不明) 和 CLIPBOARD (用于剪切、复制和粘贴操
作)。

在三种选择区里，Vim 使用 PRIMARY 用于读写 "* 寄存器 (因而，如果 X11 选择区可
用，Vim 为  <a href="options.html#'clipboard'">'clipboard'</a>  的缺省值加上 "autoselect")。CLIPBOARD 用于读写 "+ 寄
存器。Vim 不使用 SECONDARY 选择区。

这适用于 GUI，也适用于终端版本。非 X11 系统上 "+ 和 "* 寄存器都使用系统剪贴
板。

例如: (假定使用默认选项)
- 在 Vim 的可视模式里选中一个 URL。转到你的浏览器的 URL 文本框里并单击鼠标中
  键。所选择的文字将被插入 (希望如此！)。<code class="note">备注</code>: 在 Firefox 中，可以在
  about:config 里设置 middlemouse.contentLoadURL 属性为 true，这样在窗口的大多
  数位置单击鼠标中键都可以打开选中的 URL。
- 通过在你的浏览器中拖动鼠标选择一段文字。再到 Vim 中并按鼠标中键: 选中的文字
  被插入。
- 在 Vim 里选中一段文字并执行 "+y。转到你的浏览器，拖动鼠标选中另一段文字。现
  在使用鼠标右键并在弹出菜单里选择 "Paste"。所选中的文字被 Vim 中选中的文字所
  替换。
<code class="note">备注</code>: 使用可视模式进行选择时，"+ 寄存器中的文字仍然存在。而选中的文字存于 "*
寄存器中。这样就可以选择被覆盖的文字了。
                                                        <b class="vimtag"> <a name="x11-cut-buffer">x11-cut-buffer</a> </b>
默认有 8 个剪切缓冲区: CUT_BUFFER0 到 CUT_BUFFER7。Vim 仅使用 CUT_BUFFER0，就
是 xterm 默认使用的那一个。

只有当 Vim 不可用 (或退出或挂起)，并且因此不能响应另一个程序的选择区请求时，
Vim 才将它自己的选择区内容写入 CUT_BUFFER0 中。如果是 Vim 拥有 "+ CLIPBOARD 选
择区，那么优先写入它的值；否则，如果 Vim 拥有 "* PRIMARY 选择区，写入该值。

类似的，当 Vim 试图从 "* 或 "+ 来粘贴时 (或显式或通过点击鼠标中键隐式地对 "*
寄存器操作)，如果被请求的 X 选择区为空或不可用，Vim 退而求取 CUT_BUFFER0 的
值。

<code class="note">备注</code>: 用这种方式复制文字到 CUT_BUFFER0 时，选择区的类型 (字符，行或列块) 总是
被丢失，即使之后要粘贴的还是 Vim。

默认情况下 Xterm 总是将选择区内容同时写入 PRIMARY 和 CUT_BUFFER0 中。当它粘贴
时，xterm 会优先选用 PRIMARY。如果失败才会选用 CUT_BUFFER0。因此，在 Vim 和
Xterm 之间剪切和粘贴时，你应该使用 "* 寄存器。Xterm 不用 CLIPBOARD，所以 "+ 在
xterm 中无效。

多数较新的应用程序会通过 PRIMARY ("*) 来提供它们当前的选择区内容，并使用
CLIPBOARD ("+) 用作剪切、拷贝、粘贴操作。你可以通过选择 "* 或 "+ 寄存器来访问
两者。


 vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
</section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
